package main

import (
	"fmt"
	"os"
)

// 获取用户输入的身高体重，计算BMI指数
func main() {
	height, weight := GetUserInput()
	bmi := calculateBMI(height, weight)
	status := getWeightStatus(bmi)
	printBMIDefinitions()
	fmt.Printf("您的BMI指数为: %.2f\n", bmi)
	fmt.Printf("您的体重状况为: %s\n", status)
	fmt.Println("按任意键关闭...")
	var input string
	fmt.Scanln(&input)
}

func GetUserInput() (float64, float64) {
	var height float64
	var weight float64

	for {
		fmt.Println("请输入身高(单位:米):")
		_, err := fmt.Scanln(&height)
		if err == nil {
			break
		}
		fmt.Println("输入无效，请输入一个有效的数字。")
		// 清除输入缓冲区
		os.Stdin.Read(make([]byte, 1024))
	}

	for {
		fmt.Println("请输入体重(单位:千克):")
		_, err := fmt.Scanln(&weight)
		if err == nil {
			break
		}
		fmt.Println("输入无效，请输入一个有效的数字。")
		// 清除输入缓冲区
		os.Stdin.Read(make([]byte, 1024))
	}

	return height, weight
}

// 根据BMI指数判断体重状况
func getWeightStatus(bmi float64) string {
	if bmi < 18.5 {
		return "体重过轻 (BMI < 18.5): 可能营养不良，需增加体重。"
	} else if bmi >= 18.5 && bmi < 24.9 {
		return "正常 (18.5 ≤ BMI < 24.9): 体重正常，保持健康生活方式。"
	} else if bmi >= 24.9 && bmi < 29.9 {
		return "超重 (24.9 ≤ BMI < 29.9): 可能需要控制体重，注意饮食和锻炼。"
	} else {
		return "肥胖 (BMI ≥ 29.9): 需关注健康，建议咨询医生。"
	}
}

// 输出所有BMI区间及其意义
func printBMIDefinitions() {
	fmt.Println("BMI区间及其意义:")
	fmt.Println("体重过轻: BMI < 18.5")
	fmt.Println("正常: 18.5 ≤ BMI < 24.9")
	fmt.Println("超重: 24.9 ≤ BMI < 29.9")
	fmt.Println("肥胖: BMI ≥ 29.9")
}

// 计算BMI指数
func calculateBMI(height, weight float64) float64 {
	return weight / (height * height)
}
